#ifndef INFONES_ADAPTER_H
#define INFONES_ADAPTER_H

#include <stdint.h>
#include <stdbool.h>
#include "InfoNES.h"
#include "InfoNES_System.h"

// HarmonyOS Native Window和Graphics相关头文件
// 注意：这些头文件路径可能需要根据实际的HarmonyOS SDK调整
// #include <native_window.h>
// #include <arkgraphics_2d.h>

// 前向声明
typedef struct NativeWindow NativeWindow;
typedef struct ArkGraphics2D ArkGraphics2D;

// 函数指针类型定义
typedef ArkGraphics2D* (*CreateArkGraphics2DFunc)(NativeWindow* window);
typedef void (*ReleaseArkGraphics2DFunc)(ArkGraphics2D* graphics);
typedef void (*DrawPixelFunc)(ArkGraphics2D* graphics, int x, int y, uint32_t color);
typedef void (*FlushFunc)(ArkGraphics2D* graphics);

// 适配器接口
bool InfoNES_Adapter_Init(void);
void InfoNES_Adapter_Deinit(void);
bool InfoNES_Adapter_LoadROM(const uint8_t* data, uint32_t size);
void InfoNES_Adapter_Reset(void);
void InfoNES_Adapter_RunFrame(void);
void InfoNES_Adapter_SetControllerState(int controller, uint8_t state);
uint16_t* InfoNES_Adapter_GetScreenBuffer(void);
bool InfoNES_Adapter_IsRunning(void);
void InfoNES_Adapter_Pause(void);
void InfoNES_Adapter_Resume(void);
void InfoNES_Adapter_SetNativeWindow(void* window);

// 系统接口函数声明（实现infoNES期望的接口）
int InfoNES_Menu(void);
int InfoNES_ReadRom(const char* pszFileName);
void InfoNES_ReleaseRom(void);
void InfoNES_LoadFrame(void);
void InfoNES_PadState(DWORD* pdwPad1, DWORD* pdwPad2, DWORD* pdwSystem);
void* InfoNES_MemoryCopy(void* dest, const void* src, int count);
void* InfoNES_MemorySet(void* dest, int c, int count);
void InfoNES_DebugPrint(char* pszMsg);
void InfoNES_Wait(void);
void InfoNES_SoundInit(void);
int InfoNES_SoundOpen(int samples_per_sync, int sample_rate);
void InfoNES_SoundClose(void);
void InfoNES_SoundOutput(int samples, BYTE* wave1, BYTE* wave2, BYTE* wave3, BYTE* wave4, BYTE* wave5);
void InfoNES_MessageBox(char* pszMsg, ...);

// 显示系统相关函数
void InfoNES_Display_Init(void);
void InfoNES_Display_Fin(void);
void InfoNES_Display_SetNativeWindow(void* window);
uint32_t InfoNES_ConvertColor(WORD nesColor);

#endif // INFONES_ADAPTER_H
